Fix custom buttons with translated string
The reason why the buttons aren't being updated with the translated string is because the cache the views get the string from is not updated/loaded with the new language.
Rather, the update happens after the view has been inflated. With this change, when the string cache updates in bindStringCache(), we update the UI right then.
bug: 280958663
bug: 288442609
test: Manual
Change-Id: I7a49ee401d5a5f3268cfaef1abee8153e913a8ce
(cherry picked from commit 076dcdfd54)
This commit is contained in:
@@ -3053,6 +3053,7 @@ public class Launcher extends StatefulActivity<LauncherState>
|
||||
@Override
|
||||
public void bindStringCache(StringCache cache) {
|
||||
mStringCache = cache;
|
||||
mAppsView.updateWorkUI();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
package com.android.launcher3.allapps;
|
||||
|
||||
import static com.android.launcher3.allapps.ActivityAllAppsContainerView.AdapterHolder.SEARCH;
|
||||
import static com.android.launcher3.allapps.BaseAllAppsAdapter.VIEW_TYPE_WORK_DISABLED_CARD;
|
||||
import static com.android.launcher3.allapps.BaseAllAppsAdapter.VIEW_TYPE_WORK_EDU_CARD;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ALLAPPS_COUNT;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ALLAPPS_TAP_ON_PERSONAL_TAB;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ALLAPPS_TAP_ON_WORK_TAB;
|
||||
@@ -77,6 +79,7 @@ import com.android.launcher3.keyboard.FocusedItemDecorator;
|
||||
import com.android.launcher3.model.StringCache;
|
||||
import com.android.launcher3.model.data.ItemInfo;
|
||||
import com.android.launcher3.testing.shared.TestProtocol;
|
||||
import com.android.launcher3.util.Executors;
|
||||
import com.android.launcher3.util.ItemInfoMatcher;
|
||||
import com.android.launcher3.util.Themes;
|
||||
import com.android.launcher3.views.ActivityContext;
|
||||
@@ -1110,6 +1113,30 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
|
||||
return view.getGlobalVisibleRect(new Rect());
|
||||
}
|
||||
|
||||
/** Called in Launcher#bindStringCache() to update the UI when cache is updated. */
|
||||
public void updateWorkUI() {
|
||||
setDeviceManagementResources();
|
||||
if (mWorkManager.getWorkModeSwitch() != null) {
|
||||
mWorkManager.getWorkModeSwitch().updateStringFromCache();
|
||||
}
|
||||
inflateWorkCardsIfNeeded();
|
||||
}
|
||||
|
||||
private void inflateWorkCardsIfNeeded() {
|
||||
AllAppsRecyclerView workRV = mAH.get(AdapterHolder.WORK).mRecyclerView;
|
||||
if (workRV != null) {
|
||||
for (int i = 0; i < workRV.getChildCount(); i++) {
|
||||
View currentView = workRV.getChildAt(i);
|
||||
int currentItemViewType = workRV.getChildViewHolder(currentView).getItemViewType();
|
||||
if (currentItemViewType == VIEW_TYPE_WORK_EDU_CARD) {
|
||||
((WorkEduCard) currentView).updateStringFromCache();
|
||||
} else if (currentItemViewType == VIEW_TYPE_WORK_DISABLED_CARD) {
|
||||
((WorkPausedCard) currentView).updateStringFromCache();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public boolean isPersonalTabVisible() {
|
||||
return isDescendantViewVisible(R.id.tab_personal);
|
||||
|
||||
@@ -76,11 +76,7 @@ public class WorkEduCard extends FrameLayout implements
|
||||
super.onFinishInflate();
|
||||
findViewById(R.id.action_btn).setOnClickListener(this);
|
||||
|
||||
StringCache cache = mActivityContext.getStringCache();
|
||||
if (cache != null) {
|
||||
TextView title = findViewById(R.id.work_apps_paused_title);
|
||||
title.setText(cache.workProfileEdu);
|
||||
}
|
||||
updateStringFromCache();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -121,4 +117,12 @@ public class WorkEduCard extends FrameLayout implements
|
||||
public void setPosition(int position) {
|
||||
mPosition = position;
|
||||
}
|
||||
|
||||
public void updateStringFromCache() {
|
||||
StringCache cache = mActivityContext.getStringCache();
|
||||
if (cache != null) {
|
||||
TextView title = findViewById(R.id.work_apps_paused_title);
|
||||
title.setText(cache.workProfileEdu);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,10 +92,7 @@ public class WorkModeSwitch extends LinearLayout implements Insettable,
|
||||
}
|
||||
|
||||
setInsets(mActivityContext.getDeviceProfile().getInsets());
|
||||
StringCache cache = mActivityContext.getStringCache();
|
||||
if (cache != null) {
|
||||
mTextView.setText(cache.workProfilePauseButton);
|
||||
}
|
||||
updateStringFromCache();
|
||||
|
||||
getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
|
||||
}
|
||||
@@ -213,4 +210,11 @@ public class WorkModeSwitch extends LinearLayout implements Insettable,
|
||||
public int getScrollThreshold() {
|
||||
return mScrollThreshold;
|
||||
}
|
||||
|
||||
public void updateStringFromCache(){
|
||||
StringCache cache = mActivityContext.getStringCache();
|
||||
if (cache != null) {
|
||||
mTextView.setText(cache.workProfilePauseButton);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +57,10 @@ public class WorkPausedCard extends LinearLayout implements View.OnClickListener
|
||||
mBtn = findViewById(R.id.enable_work_apps);
|
||||
mBtn.setOnClickListener(this);
|
||||
|
||||
updateStringFromCache();
|
||||
}
|
||||
|
||||
public void updateStringFromCache() {
|
||||
StringCache cache = mActivityContext.getStringCache();
|
||||
if (cache != null) {
|
||||
setWorkProfilePausedResources(cache);
|
||||
|
||||
@@ -312,7 +312,8 @@ public abstract class BaseLauncherBinder {
|
||||
currentScreenIds, pendingTasks, workspaceItemCount, isBindSync);
|
||||
}, mUiExecutor);
|
||||
|
||||
mCallbacks.bindStringCache(mBgDataModel.stringCache.clone());
|
||||
StringCache cacheClone = mBgDataModel.stringCache.clone();
|
||||
executeCallbacksTask(c -> c.bindStringCache(cacheClone), pendingExecutor);
|
||||
}
|
||||
|
||||
private void bindWorkspaceItems(
|
||||
@@ -440,9 +441,8 @@ public abstract class BaseLauncherBinder {
|
||||
.resumeModelPush(FLAG_LOADER_RUNNING);
|
||||
});
|
||||
|
||||
for (Callbacks cb : mCallbacksList) {
|
||||
cb.bindStringCache(mBgDataModel.stringCache.clone());
|
||||
}
|
||||
StringCache cacheClone = mBgDataModel.stringCache.clone();
|
||||
executeCallbacksTask(c -> c.bindStringCache(cacheClone), mUiExecutor);
|
||||
}
|
||||
|
||||
private void bindWorkspaceItems(final ArrayList<ItemInfo> workspaceItems) {
|
||||
|
||||
Reference in New Issue
Block a user