/* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.car.settings.accounts; import android.content.Context; import android.view.View; import android.widget.TextView; import androidx.preference.PreferenceViewHolder; import androidx.preference.SwitchPreference; import com.android.car.apps.common.util.Themes; import com.android.car.settings.R; /** * A preference that represents the state of a sync adapter. * *
Largely derived from {@link com.android.settings.accounts.SyncStateSwitchPreference}. */ public class SyncPreference extends SwitchPreference { private int mUid; private String mPackageName; private AccountSyncHelper.SyncState mSyncState = AccountSyncHelper.SyncState.NONE; private boolean mOneTimeSyncMode = false; public SyncPreference(Context context, String authority) { super(context); setKey(authority); setPersistent(false); updateIcon(); } @Override public void onBindViewHolder(PreferenceViewHolder view) { super.onBindViewHolder(view); View switchView = view.findViewById(com.android.internal.R.id.switch_widget); if (mOneTimeSyncMode) { switchView.setVisibility(View.GONE); /* * Override the summary. Fill in the %1$s with the existing summary * (what ends up happening is the old summary is shown on the next * line). */ TextView summary = (TextView) view.findViewById(android.R.id.summary); summary.setText(getContext().getString(R.string.sync_one_time_sync, getSummary())); } else { switchView.setVisibility(View.VISIBLE); } } /** Updates the preference icon based on the current syncing state. */ private void updateIcon() { switch (mSyncState) { case ACTIVE: setIcon(R.drawable.ic_sync_anim); getIcon().setTintList(Themes.getAttrColorStateList(getContext(), R.attr.iconColor)); break; case PENDING: setIcon(R.drawable.ic_sync); getIcon().setTintList(Themes.getAttrColorStateList(getContext(), R.attr.iconColor)); break; case FAILED: setIcon(R.drawable.ic_sync_problem); getIcon().setTintList(Themes.getAttrColorStateList(getContext(), R.attr.iconColor)); break; default: setIcon(null); setIconSpaceReserved(true); break; } } /** Sets the sync state for this preference. */ public void setSyncState(AccountSyncHelper.SyncState state) { mSyncState = state; // Force a manual update of the icon since the sync state affects what is shown. updateIcon(); } /** * Returns whether or not the sync adapter is in one-time sync mode. * *
One-time sync mode means that the sync adapter is not being automatically synced but * can be manually synced (i.e. a one time sync). */ public boolean isOneTimeSyncMode() { return mOneTimeSyncMode; } /** Sets whether one-time sync mode is on for this preference. */ public void setOneTimeSyncMode(boolean oneTimeSyncMode) { mOneTimeSyncMode = oneTimeSyncMode; // Force a refresh so that onBindViewHolder is called notifyChanged(); } /** * Returns the uid corresponding to the sync adapter's package. * *
This can be used to create an intent to request account access via * {@link android.accounts.AccountManager#createRequestAccountAccessIntentSenderAsUser}. */ public int getUid() { return mUid; } /** Sets the uid for this preference. */ public void setUid(int uid) { mUid = uid; } public String getPackageName() { return mPackageName; } public void setPackageName(String packageName) { mPackageName = packageName; } }