content: /*
   * Copyright (C) 2014 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 dev.dworks.apps.anexplorer.common;
  
  import android.content.res.Configuration;
  import android.os.Build;
  import android.os.Bundle;
  import android.preference.PreferenceActivity;
  import android.view.MenuInflater;
  import android.view.View;
  import android.view.ViewGroup;
  
  import androidx.annotation.LayoutRes;
  import androidx.annotation.Nullable;
  import androidx.appcompat.app.ActionBar;
  import androidx.appcompat.app.AppCompatDelegate;
  import androidx.appcompat.widget.Toolbar;
  import dev.dworks.apps.anexplorer.misc.AnalyticsManager;
  import dev.dworks.apps.anexplorer.misc.Utils;
  
  /**
   * A {@link PreferenceActivity} which implements and proxies the necessary calls
   * to be used with AppCompat.
   *
   * This technique can be used with an {@link android.app.Activity} class, not just
   * {@link PreferenceActivity}.
   */
  public abstract class AppCompatPreferenceActivity extends PreferenceActivity {
  
      private AppCompatDelegate mDelegate;
      private int mThemeId = 0;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          Utils.changeThemeStyle(getDelegate());
          getDelegate().installViewFactory();
          getDelegate().onCreate(savedInstanceState);
          if (mDelegate.applyDayNight() && mThemeId != 0) {
              // If DayNight has been applied, we need to re-apply the theme for
              // the changes to take effect. On API 23+, we should bypass
              // setTheme(), which will no-op if the theme ID is identical to the
              // current theme ID.
              if (Build.VERSION.SDK_INT >= 23) {
                  onApplyThemeResource(getTheme(), mThemeId, false);
              } else {
                  setTheme(mThemeId);
              }
          }
          super.onCreate(savedInstanceState);
          AnalyticsManager.setCurrentScreen(this, getTag());
      }
  
      @Override
      public void setTheme(int resid) {
          super.setTheme(resid);
          // Keep hold of the theme id so that we can re-set it later if needed
          mThemeId = resid;
      }
  
      @Override
      protected void onPostCreate(Bundle savedInstanceState) {
          super.onPostCreate(savedInstanceState);
          getDelegate().onPostCreate(savedInstanceState);
      }
  
      public ActionBar getSupportActionBar() {
          return getDelegate().getSupportActionBar();
      }
  
      public void setSupportActionBar(@Nullable Toolbar toolbar) {
          getDelegate().setSupportActionBar(toolbar);
      }
  
      @Override
      public MenuInflater getMenuInflater() {
          return getDelegate().getMenuInflater();
      }
  
      @Override
      public void setContentView(@LayoutRes int layoutResID) {
          getDelegate().setContentView(layoutResID);
      }
  
      @Override
      public void setContentView(View view) {
          getDelegate().setContentView(view);
      }
  
      @Override
      public void setContentView(View view, ViewGroup.LayoutParams params) {
          getDelegate().setContentView(view, params);
      }
  
      @Override
      public void addContentView(View view, ViewGroup.LayoutParams params) {
          getDelegate().addContentView(view, params);
      }
  
      @Override
      protected void onPostResume() {
          super.onPostResume();
          getDelegate().onPostResume();
      }
  
      @Override
      protected void onTitleChanged(CharSequence title, int color) {
          super.onTitleChanged(title, color);
          getDelegate().setTitle(title);
      }
  
      @Override
      public void onConfigurationChanged(Configuration newConfig) {
          super.onConfigurationChanged(newConfig);
          getDelegate().onConfigurationChanged(newConfig);
      }
  
      @Override
      protected void onStop() {
          super.onStop();
          getDelegate().onStop();
      }
  
      @Override
      protected void onDestroy() {
          super.onDestroy();
          getDelegate().onDestroy();
      }
  
      public void invalidateOptionsMenu() {
          getDelegate().invalidateOptionsMenu();
      }
  
      private AppCompatDelegate getDelegate() {
          if (mDelegate == null) {
              mDelegate = AppCompatDelegate.create(this, null);
          }
          return mDelegate;
      }
  
      @Override
      public void recreate() {
          Utils.changeThemeStyle(getDelegate());
          super.recreate();
      }
  
      public abstract String getTag();
  }