diff options
| author | 2023-12-19 20:56:49 +0000 | |
|---|---|---|
| committer | 2023-12-19 20:56:49 +0000 | |
| commit | 474f4cca2a2c554895910173f1465f131e2b0f79 (patch) | |
| tree | b2411844a46d2f3ad4389783a71a67e974df3930 /java/src | |
| parent | 9936ef030349956c84a796a5b1b12f5fcb08874c (diff) | |
| parent | c66c3b8e0d3c9ed894c3d69d84d52e0ecff98a37 (diff) | |
Merge "Move `setupProfileTabs()` to the pager adapter" into main
Diffstat (limited to 'java/src')
3 files changed, 119 insertions, 113 deletions
diff --git a/java/src/com/android/intentresolver/v2/ChooserActivity.java b/java/src/com/android/intentresolver/v2/ChooserActivity.java index f05a8ab3..114cb5fb 100644 --- a/java/src/com/android/intentresolver/v2/ChooserActivity.java +++ b/java/src/com/android/intentresolver/v2/ChooserActivity.java @@ -88,11 +88,9 @@ import android.view.ViewTreeObserver; import android.view.Window; import android.view.WindowInsets; import android.view.WindowManager; -import android.widget.Button; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TabHost; -import android.widget.TabWidget; import android.widget.TextView; import android.widget.Toast; @@ -1159,63 +1157,24 @@ public class ChooserActivity extends Hilt_ChooserActivity implements private void setupProfileTabs() { TabHost tabHost = findViewById(com.android.internal.R.id.profile_tabhost); - tabHost.setup(); ViewPager viewPager = findViewById(com.android.internal.R.id.profile_pager); - viewPager.setSaveEnabled(false); - - Button personalButton = (Button) getLayoutInflater().inflate( - R.layout.resolver_profile_tab_button, tabHost.getTabWidget(), false); - personalButton.setText(mDevicePolicyResources.getPersonalTabLabel()); - personalButton.setContentDescription( - mDevicePolicyResources.getPersonalTabAccessibilityLabel()); - - TabHost.TabSpec tabSpec = tabHost.newTabSpec(TAB_TAG_PERSONAL) - .setContent(com.android.internal.R.id.profile_pager) - .setIndicator(personalButton); - tabHost.addTab(tabSpec); - - Button workButton = (Button) getLayoutInflater().inflate( - R.layout.resolver_profile_tab_button, tabHost.getTabWidget(), false); - workButton.setText(mDevicePolicyResources.getWorkTabLabel()); - workButton.setContentDescription(mDevicePolicyResources.getWorkTabAccessibilityLabel()); - - tabSpec = tabHost.newTabSpec(TAB_TAG_WORK) - .setContent(com.android.internal.R.id.profile_pager) - .setIndicator(workButton); - tabHost.addTab(tabSpec); - - TabWidget tabWidget = tabHost.getTabWidget(); - tabWidget.setVisibility(View.VISIBLE); - - Runnable updateActiveTabStyle = () -> { - int currentTab = tabHost.getCurrentTab(); - TextView selected = (TextView) tabHost.getTabWidget().getChildAt(currentTab); - TextView unselected = (TextView) tabHost.getTabWidget().getChildAt(1 - currentTab); - selected.setSelected(true); - unselected.setSelected(false); - }; - - updateActiveTabStyle.run(); - - tabHost.setOnTabChangedListener(tabId -> { - updateActiveTabStyle.run(); - if (TAB_TAG_PERSONAL.equals(tabId)) { - viewPager.setCurrentItem(0); - } else { - viewPager.setCurrentItem(1); - } - onProfileTabSelected(viewPager.getCurrentItem()); - }); - viewPager.setVisibility(View.VISIBLE); - tabHost.setCurrentTab(mChooserMultiProfilePagerAdapter.getCurrentPage()); - mChooserMultiProfilePagerAdapter.setOnProfileSelectedListener( + mChooserMultiProfilePagerAdapter.setupProfileTabs( + getLayoutInflater(), + tabHost, + viewPager, + R.layout.resolver_profile_tab_button, + com.android.internal.R.id.profile_pager, + mDevicePolicyResources.getPersonalTabLabel(), + mDevicePolicyResources.getPersonalTabAccessibilityLabel(), + TAB_TAG_PERSONAL, + mDevicePolicyResources.getWorkTabLabel(), + mDevicePolicyResources.getWorkTabAccessibilityLabel(), + TAB_TAG_WORK, + () -> onProfileTabSelected(viewPager.getCurrentItem()), new MultiProfilePagerAdapter.OnProfileSelectedListener() { @Override - public void onProfilePageSelected(@Profile int profileId, int pageNumber) { - tabHost.setCurrentTab(pageNumber); - - } + public void onProfilePageSelected(@Profile int profileId, int pageNumber) {} @Override public void onProfilePageStateChanged(int state) { @@ -1223,7 +1182,9 @@ public class ChooserActivity extends Hilt_ChooserActivity implements } }); mOnSwitchOnWorkSelectedListener = () -> { - final View workTab = tabHost.getTabWidget().getChildAt(1); + final View workTab = + tabHost.getTabWidget().getChildAt( + mChooserMultiProfilePagerAdapter.getPageNumberForProfile(PROFILE_WORK)); workTab.setFocusable(true); workTab.setFocusableInTouchMode(true); workTab.requestFocus(); diff --git a/java/src/com/android/intentresolver/v2/MultiProfilePagerAdapter.java b/java/src/com/android/intentresolver/v2/MultiProfilePagerAdapter.java index dc821e88..3387a73f 100644 --- a/java/src/com/android/intentresolver/v2/MultiProfilePagerAdapter.java +++ b/java/src/com/android/intentresolver/v2/MultiProfilePagerAdapter.java @@ -19,8 +19,12 @@ import android.annotation.IntDef; import android.annotation.Nullable; import android.os.Trace; import android.os.UserHandle; +import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TabHost; +import android.widget.TextView; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; @@ -170,7 +174,7 @@ class MultiProfilePagerAdapter< return -1; } - private int getPageNumberForProfile(@Profile int profile) { + public int getPageNumberForProfile(@Profile int profile) { for (int i = 0; i < mItems.size(); ++i) { if (profile == mItems.get(i).mProfile) { return i; @@ -179,8 +183,85 @@ class MultiProfilePagerAdapter< return -1; } - public void setOnProfileSelectedListener(OnProfileSelectedListener listener) { - mOnProfileSelectedListener = listener; + private void updateActiveTabStyle(TabHost tabHost) { + int currentTab = tabHost.getCurrentTab(); + + for (int pageNumber = 0; pageNumber < getItemCount(); ++pageNumber) { + // TODO: can we avoid this downcast by pushing our knowledge of the intended view type + // somewhere else? + TextView tabText = (TextView) tabHost.getTabWidget().getChildAt(pageNumber); + tabText.setSelected(currentTab == pageNumber); + } + } + + public void setupProfileTabs( + LayoutInflater layoutInflater, + TabHost tabHost, + ViewPager viewPager, + int tabButtonLayoutResId, + int tabPageContentViewId, + String personalTabLabel, + String personalTabAccessibilityLabel, + String personalTabTag, + String workTabLabel, + String workTabAccessibilityLabel, + String workTabTag, + Runnable onTabChangeListener, + MultiProfilePagerAdapter.OnProfileSelectedListener clientOnProfileSelectedListener) { + tabHost.setup(); + viewPager.setSaveEnabled(false); + + Button personalButton = (Button) layoutInflater.inflate( + tabButtonLayoutResId, tabHost.getTabWidget(), false); + personalButton.setText(personalTabLabel); + personalButton.setContentDescription(personalTabAccessibilityLabel); + + TabHost.TabSpec personalTabSpec = tabHost.newTabSpec(personalTabTag) + .setContent(tabPageContentViewId) + .setIndicator(personalButton); + tabHost.addTab(personalTabSpec); + + Button workButton = (Button) layoutInflater.inflate( + tabButtonLayoutResId, tabHost.getTabWidget(), false); + workButton.setText(workTabLabel); + workButton.setContentDescription(workTabAccessibilityLabel); + + TabHost.TabSpec workTabSpec = tabHost.newTabSpec(workTabTag) + .setContent(tabPageContentViewId) + .setIndicator(workButton); + tabHost.addTab(workTabSpec); + + tabHost.getTabWidget().setVisibility(View.VISIBLE); + + updateActiveTabStyle(tabHost); + + tabHost.setOnTabChangedListener(tabId -> { + updateActiveTabStyle(tabHost); + // TODO: update for 3+ tabs. + if (personalTabTag.equals(tabId)) { + viewPager.setCurrentItem(0); + } else { + viewPager.setCurrentItem(1); + } + onTabChangeListener.run(); + }); + + viewPager.setVisibility(View.VISIBLE); + tabHost.setCurrentTab(getCurrentPage()); + mOnProfileSelectedListener = + new MultiProfilePagerAdapter.OnProfileSelectedListener() { + @Override + public void onProfilePageSelected(@Profile int profileId, int pageNumber) { + tabHost.setCurrentTab(pageNumber); + clientOnProfileSelectedListener.onProfilePageSelected( + profileId, pageNumber); + } + + @Override + public void onProfilePageStateChanged(int state) { + clientOnProfileSelectedListener.onProfilePageStateChanged(state); + } + }; } /** diff --git a/java/src/com/android/intentresolver/v2/ResolverActivity.java b/java/src/com/android/intentresolver/v2/ResolverActivity.java index 9905cc2c..b25a6e8a 100644 --- a/java/src/com/android/intentresolver/v2/ResolverActivity.java +++ b/java/src/com/android/intentresolver/v2/ResolverActivity.java @@ -81,7 +81,6 @@ import android.widget.ImageView; import android.widget.ListView; import android.widget.Space; import android.widget.TabHost; -import android.widget.TabWidget; import android.widget.TextView; import android.widget.Toast; @@ -1893,72 +1892,37 @@ public class ResolverActivity extends Hilt_ResolverActivity implements private void setupProfileTabs() { maybeHideDivider(); + TabHost tabHost = findViewById(com.android.internal.R.id.profile_tabhost); - tabHost.setup(); ViewPager viewPager = findViewById(com.android.internal.R.id.profile_pager); - viewPager.setSaveEnabled(false); - - Button personalButton = (Button) getLayoutInflater().inflate( - R.layout.resolver_profile_tab_button, tabHost.getTabWidget(), false); - personalButton.setText(mDevicePolicyResources.getPersonalTabLabel()); - personalButton.setContentDescription( - mDevicePolicyResources.getPersonalTabAccessibilityLabel()); - - TabHost.TabSpec tabSpec = tabHost.newTabSpec(TAB_TAG_PERSONAL) - .setContent(com.android.internal.R.id.profile_pager) - .setIndicator(personalButton); - tabHost.addTab(tabSpec); - - Button workButton = (Button) getLayoutInflater().inflate( - R.layout.resolver_profile_tab_button, tabHost.getTabWidget(), false); - workButton.setText(mDevicePolicyResources.getWorkTabLabel()); - workButton.setContentDescription(mDevicePolicyResources.getWorkTabAccessibilityLabel()); - - tabSpec = tabHost.newTabSpec(TAB_TAG_WORK) - .setContent(com.android.internal.R.id.profile_pager) - .setIndicator(workButton); - tabHost.addTab(tabSpec); - - TabWidget tabWidget = tabHost.getTabWidget(); - tabWidget.setVisibility(View.VISIBLE); - - Runnable updateActiveTabStyle = () -> { - int currentTab = tabHost.getCurrentTab(); - TextView selected = (TextView) tabHost.getTabWidget().getChildAt(currentTab); - TextView unselected = (TextView) tabHost.getTabWidget().getChildAt(1 - currentTab); - selected.setSelected(true); - unselected.setSelected(false); - }; - - updateActiveTabStyle.run(); - - tabHost.setOnTabChangedListener(tabId -> { - updateActiveTabStyle.run(); - if (TAB_TAG_PERSONAL.equals(tabId)) { - viewPager.setCurrentItem(0); - } else { - viewPager.setCurrentItem(1); - } - onProfileTabSelected(viewPager.getCurrentItem()); - }); - viewPager.setVisibility(View.VISIBLE); - tabHost.setCurrentTab(mMultiProfilePagerAdapter.getCurrentPage()); - mMultiProfilePagerAdapter.setOnProfileSelectedListener( + mMultiProfilePagerAdapter.setupProfileTabs( + getLayoutInflater(), + tabHost, + viewPager, + R.layout.resolver_profile_tab_button, + com.android.internal.R.id.profile_pager, + mDevicePolicyResources.getPersonalTabLabel(), + mDevicePolicyResources.getPersonalTabAccessibilityLabel(), + TAB_TAG_PERSONAL, + mDevicePolicyResources.getWorkTabLabel(), + mDevicePolicyResources.getWorkTabAccessibilityLabel(), + TAB_TAG_WORK, + () -> onProfileTabSelected(viewPager.getCurrentItem()), new MultiProfilePagerAdapter.OnProfileSelectedListener() { @Override public void onProfilePageSelected(@Profile int profileId, int pageNumber) { - tabHost.setCurrentTab(pageNumber); resetButtonBar(); resetCheckedItem(); } @Override - public void onProfilePageStateChanged(int state) { - } + public void onProfilePageStateChanged(int state) {} }); mOnSwitchOnWorkSelectedListener = () -> { - final View workTab = tabHost.getTabWidget().getChildAt(1); + final View workTab = + tabHost.getTabWidget().getChildAt( + mMultiProfilePagerAdapter.getPageNumberForProfile(PROFILE_WORK)); workTab.setFocusable(true); workTab.setFocusableInTouchMode(true); workTab.requestFocus(); |