/* * Copyright 2015 Google Inc. * * 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 net.nurik.roman.formwatchface; import android.app.Activity; import android.app.Fragment; import android.content.SharedPreferences; import android.graphics.Rect; import android.os.Bundle; import android.os.PersistableBundle; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import android.support.wearable.view.DotsPageIndicator; import android.support.wearable.view.FragmentGridPagerAdapter; import android.support.wearable.view.GridViewPager; import android.view.View; import android.view.ViewTreeObserver; import android.view.WindowInsets; import net.nurik.roman.formwatchface.common.config.ConfigHelper; import net.nurik.roman.formwatchface.common.config.Themes; import net.nurik.roman.formwatchface.common.config.UpdateConfigIntentService; public class WearableWatchFaceConfigActivity extends Activity { private GridViewPager mGridViewPager; private DotsPageIndicator mPagerIndicator; private View mContainerView; private static float ROUND_FACTOR = 0.146467f; //(1 - sqrt(2)/2)/2 (from BoxInsetLayout) private Rect mInsetsRect = new Rect(); private boolean mIsRound; private SharedPreferences mSharedPreferences; private ConfigComplicationsFragment mConfigComplicationsFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.config_watch_face_activity); mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); registerSharedPrefsListener(); mGridViewPager = (GridViewPager) findViewById(R.id.pager); mGridViewPager.setAdapter(new FragmentGridPagerAdapter(getFragmentManager()) { @Override public Fragment getFragment(int row, int column) { switch (column) { case 0: return new ConfigThemeFragment(); case 1: mConfigComplicationsFragment = new ConfigComplicationsFragment(); return mConfigComplicationsFragment; } return null; } @Override public int getRowCount() { return 1; } @Override public int getColumnCount(int row) { return 2; } }); mPagerIndicator = (DotsPageIndicator) findViewById(R.id.pager_indicator); mPagerIndicator.setPager(mGridViewPager); mContainerView = findViewById(R.id.container); mContainerView.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() { @Override public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) { mIsRound = insets.isRound(); mInsetsRect.set( insets.getSystemWindowInsetLeft(), insets.getSystemWindowInsetTop(), insets.getSystemWindowInsetRight(), insets.getSystemWindowInsetBottom()); mPagerIndicator.setTranslationY(-mInsetsRect.bottom); if (mIsRound) { mInsetsRect.left = Math.max((int) (v.getWidth() * ROUND_FACTOR), mInsetsRect.left); mInsetsRect.right = Math.max((int) (v.getWidth() * ROUND_FACTOR), mInsetsRect.right); mInsetsRect.top = Math.max((int) (v.getWidth() * ROUND_FACTOR), mInsetsRect.top); mInsetsRect.bottom = Math.max((int) (v.getWidth() * ROUND_FACTOR), mInsetsRect.bottom); } return mContainerView.onApplyWindowInsets(insets); } }); ViewTreeObserver vto = mContainerView.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { mContainerView.requestApplyInsets(); } }); } @Override protected void onDestroy() { super.onDestroy(); unregisterSharedPrefsListener(); } private void registerSharedPrefsListener() { mSharedPreferences.registerOnSharedPreferenceChangeListener(mOnSharedPreferenceChangeListener); } private void unregisterSharedPrefsListener() { mSharedPreferences.unregisterOnSharedPreferenceChangeListener(mOnSharedPreferenceChangeListener); } private SharedPreferences.OnSharedPreferenceChangeListener mOnSharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (ConfigHelper.isConfigPrefKey(key)) { UpdateConfigIntentService.startConfigChangeService( WearableWatchFaceConfigActivity.this); if (mConfigComplicationsFragment != null) { mConfigComplicationsFragment.update(); } } } }; @Override protected void onPause() { super.onPause(); // if (isFinishing()) { // UpdateConfigIntentService.startConfigChangeService(this); // } } @Override public void onAttachedToWindow() { super.onAttachedToWindow(); mContainerView.requestApplyInsets(); } }