添加修改时间服务器

packages/apps/Settings / res/xml/date_time_prefs.xml

    <PreferenceCategory
        android:key="ntp_server_preference_category"
        android:layout="@layout/preference_category_no_label">
        <com.android.settings.datetime.DhcpNtpServerSwitchPreference
            android:key="dhcp_ntp_server"
            android:title="Use DHCP NTP server" />
        <com.android.settings.datetime.NTPServerPreference
            android:key="ntp_server"
            android:title="NTP Server"
            android:summary=""/>
    </PreferenceCategory>

packages/apps/Settings / src/com/android/settings/datetime/DateTimeSettings.java

controllers.add(new NTPServerPreferenceController(context));

packages/apps/Settings / src/com/android/settings/datetime/DhcpNtpServerSwitchPreference.java

package com.android.settings.datetime;

import android.content.Context;
import android.provider.Settings;
import androidx.core.content.res.TypedArrayUtils;
import androidx.preference.SwitchPreference;
import android.util.AttributeSet;
import android.view.View;

public class DhcpNtpServerSwitchPreference extends SwitchPreference {

    private Context mContext;

    public DhcpNtpServerSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);

        mContext = context;
        mChecked = Settings.Global.getInt(context.getContentResolver(), "dhcp_ntp_server", 0) != 0;
    }

    public DhcpNtpServerSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
        this(context, attrs, defStyleAttr, 0);
    }

    public DhcpNtpServerSwitchPreference(Context context, AttributeSet attrs) {
        this(context, attrs, TypedArrayUtils.getAttr(context,
                androidx.preference.R.attr.switchPreferenceStyle,
                android.R.attr.switchPreferenceStyle));
    }

    public DhcpNtpServerSwitchPreference(Context context) {
        this(context, null);
    }

    @Override
    public void setChecked(boolean enabled) {
        super.setChecked(enabled);
        Settings.Global.putInt(mContext.getContentResolver(), "dhcp_ntp_server", (enabled ? 1 : 0));
    }
}

packages/apps/Settings / src/com/android/settings/datetime/NTPServerPreference.java
package com.android.settings.datetime;

import android.content.Context;
import android.os.SystemProperties;

import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import android.content.res.Resources;
import android.util.Log;
import android.util.NtpTrustedTime;
import android.widget.EditText;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import com.android.settings.R;
import android.provider.Settings;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.ContentObserver;
import android.os.Handler;
import android.util.AttributeSet;
import androidx.core.content.res.TypedArrayUtils;

import static java.security.AccessController.getContext;


public class NTPServerPreference extends Preference {
    private final String TAG = "NTPServerPreference";
    private Context mContext;
    private String mNTPServer;
    private NtpTrustedTime mNtp;


    private ContentObserver mDhcpNtpServerObserver = new ContentObserver(new Handler()) {
        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            setEnabled(!isDhcpNtpServerEnabled());
        }
    };


    public NTPServerPreference(Context context, AttributeSet attrs,
                               int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);

        mContext = context;
        setEnabled(!isDhcpNtpServerEnabled());
        setOnPreferenceClickListener(new OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference preference) {
                showNTPServerSettingsDialog();
                return true;
            }
        });

    }

    public NTPServerPreference(Context context, AttributeSet attrs, int defStyleAttr) {
        this(context, attrs, defStyleAttr, 0);
    }

    public NTPServerPreference(Context context, AttributeSet attrs) {
        this(context, attrs, TypedArrayUtils.getAttr(context,
                androidx.preference.R.attr.preferenceStyle,
                android.R.attr.preferenceStyle));
    }

    public NTPServerPreference(Context context) {
        this(context, null);
    }

    @Override
    public void onAttached() {
        super.onAttached();
        setNTPServerSummary();
        getContext().getContentResolver().registerContentObserver(Settings.Global.getUriFor("dhcp_ntp_server"), true, mDhcpNtpServerObserver);
    }

    @Override
    public void onDetached() {
        super.onDetached();
        getContext().getContentResolver().unregisterContentObserver(mDhcpNtpServerObserver);
    }

    private void showNTPServerSettingsDialog() {
        mNTPServer = Settings.Global.getString(mContext.getContentResolver(), Settings.Global.NTP_SERVER);

        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.input_dialog_ntpserver, null);
        EditText dialogET = layout.findViewById(R.id.input_dialog_ntp_ed);
        dialogET.setText(getSummary());

        new AlertDialog.Builder(mContext)
                .setView(layout)
                .setTitle(R.string.ntp_server_address)
                .setNegativeButton(R.string.dlg_cancel, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int i) {

                    }
                }).setPositiveButton(R.string.dlg_ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int i) {
                mNtp = NtpTrustedTime.getInstance(mContext);
                mNTPServer = dialogET.getText().toString();
                //TODO:设置config
                Settings.Global.putString(mContext.getContentResolver(), "sys.device.ntpserver", mNTPServer);
                mNtp.forceSync();
//                getSummary();
                setNTPServerSummary();
                //pm add for saveNTPServer
                Settings.Global.putString(mContext.getContentResolver(), Settings.Global.NTP_SERVER, mNTPServer);
                //notify reboot
                /*new AlertDialog.Builder(mContext)
                        .setTitle(com.android.internal.R.string.notification_channel_alerts)
                        .setMessage("Please reboot to apply the new setting.")
                        .setNegativeButton(com.android.internal.R.string.cancel,new DialogInterface.OnClickListener(){
                            @Override
                            public void onClick(DialogInterface dialog,int i){

                            }
                        })
                        .setPositiveButton(com.android.internal.R.string.factorytest_reboot,new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,int i){
                                //TODO:reboot
                                Intent intent = new Intent(Intent.ACTION_REBOOT);
                                intent.putExtra("nowait", 1);
                                intent.putExtra("interval", 1);
                                intent.putExtra("window", 0);
                                mContext.sendBroadcast(intent);
                            }
                        }).create().show();*/
            }
        }).create().show();
    }

    private void setNTPServerSummary() {
        String ntpServer = Settings.Global.getString(mContext.getContentResolver(), Settings.Global.NTP_SERVER);

        Log.i("test00","     ntpServer  = " + ntpServer);
        if (ntpServer == null || ntpServer.isEmpty()) {
            Log.i("test00","   --------1--------   ");
            this.setSummary(mContext.getResources().getString(com.android.internal.R.string.config_ntpServer));
        } else {
            Log.i("test00"," --------1-------- ");
            this.setSummary(ntpServer);
        }
    }

    private boolean isDhcpNtpServerEnabled() {
        return Settings.Global.getInt(mContext.getContentResolver(), "dhcp_ntp_server", 0) != 0;
    }


    public CharSequence getSummary() {
        final Resources res = mContext.getResources();
        String ntp_server = Settings.Global.getString(mContext.getContentResolver(), "sys.device.ntpserver");
        if (ntp_server == null){
            Log.i("test00","     ntp_server  =  null " );
            ntp_server = res.getString(com.android.internal.R.string.config_ntpServer);
        }
        Log.i("test00","     ntp_server  = " + ntp_server);
        return ntp_server;
    }

}

默认服务器:frameworks/base / core/res/res/values/config.xml

<string translatable="false" name="config_ntpServer">2.android.pool.ntp.org</string>

frameworks/base / core/java/android/util/NtpTrustedTime.java

    private NtpConnectionInfo getNtpConnectionInfo() {
        final ContentResolver resolver = mContext.getContentResolver();

        final Resources res = mContext.getResources();
        String defaultServer;
        if (Settings.Global.getString(mContext.getContentResolver(), "sys.device.ntpserver") == null) {
            defaultServer = res.getString(com.android.internal.R.string.config_ntpServer);
        }else {
            defaultServer = Settings.Global.getString(mContext.getContentResolver(), "sys.device.ntpserver");
        }
        final int defaultTimeoutMillis = res.getInteger(
                com.android.internal.R.integer.config_ntpTimeout);

packages/apps/Settings / res/layout/input_dialog_ntpserver.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/input_dialog_ntp_ed"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginEnd="16dp"
        android:singleLine="true"
        android:inputType="textUri"/>
</LinearLayout>

frameworks/base/core/java/android/util/NtpTrustedTime.java

    @GuardedBy("this")
    private NtpConnectionInfo getNtpConnectionInfo() {
        final ContentResolver resolver = mContext.getContentResolver();

        final Resources res = mContext.getResources();

        final String hostname;
        if (mHostnameForTests != null) {
            hostname = mHostnameForTests;
        } else {
            String serverGlobalSetting =
                    Settings.Global.getString(resolver, Settings.Global.NTP_SERVER);
            if (serverGlobalSetting != null) {
                hostname = serverGlobalSetting;
            } else {
                hostname = res.getString(com.android.internal.R.string.config_ntpServer);
            }
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值