Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d73044a2 authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Add ImportantNoticeDialog

Change-Id: Icaeb7dddd16362cd4a6384d295f89c7fbabc8b35
parent fe39d576
Loading
Loading
Loading
Loading
+78 −0
Original line number Diff line number Diff line
/*
 * 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 com.android.inputmethod.latin;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnDismissListener;
import android.content.DialogInterface.OnShowListener;

import com.android.inputmethod.latin.utils.ImportantNoticeUtils;

/**
 * The dialog box that shows the important notice contents.
 */
public final class ImportantNoticeDialog extends AlertDialog implements OnShowListener,
        OnClickListener, OnDismissListener {
    public interface ImportantNoticeDialogListener {
        public void onClickSettingsOfImportantNoticeDialog(final int nextVersion);
        public void onDismissImportantNoticeDialog(final int nextVersion);
    }

    private final ImportantNoticeDialogListener mListener;
    private final int mNextImportantNoticeVersion;

    public ImportantNoticeDialog(
            final Context context, final ImportantNoticeDialogListener listener) {
        super(context, THEME_HOLO_DARK);
        mListener = listener;
        mNextImportantNoticeVersion = ImportantNoticeUtils.getNextImportantNoticeVersion(context);
        setMessage(ImportantNoticeUtils.getNextImportantNoticeContents(context));
        // Create buttons and set listeners.
        setButton(BUTTON_POSITIVE, context.getString(android.R.string.ok), this);
        if (shouldHaveSettingsButton()) {
            setButton(BUTTON_NEGATIVE, context.getString(R.string.go_to_settings), this);
        }
        // Set listeners.
        setOnShowListener(this);
        setOnDismissListener(this);
    }

    private boolean shouldHaveSettingsButton() {
        return mNextImportantNoticeVersion
                == ImportantNoticeUtils.VERSION_TO_ENABLE_PERSONALIZED_SUGGESTIONS;
    }

    @Override
    public void onShow(final DialogInterface dialog) {
        ImportantNoticeUtils.updateLastImportantNoticeVersion(getContext());
    }

    @Override
    public void onClick(final DialogInterface dialog, final int which) {
        if (shouldHaveSettingsButton() && which == BUTTON_NEGATIVE) {
            mListener.onClickSettingsOfImportantNoticeDialog(mNextImportantNoticeVersion);
        }
    }

    @Override
    public void onDismiss(final DialogInterface dialog) {
        mListener.onDismissImportantNoticeDialog(mNextImportantNoticeVersion);
    }
}
+15 −45
Original line number Diff line number Diff line
@@ -26,8 +26,6 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnDismissListener;
import android.content.DialogInterface.OnShowListener;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
@@ -100,7 +98,8 @@ import java.util.concurrent.TimeUnit;
 */
public class LatinIME extends InputMethodService implements KeyboardActionListener,
        SuggestionStripView.Listener, SuggestionStripViewAccessor,
        DictionaryFacilitatorForSuggest.DictionaryInitializationListener {
        DictionaryFacilitatorForSuggest.DictionaryInitializationListener,
        ImportantNoticeDialog.ImportantNoticeDialogListener {
    private static final String TAG = LatinIME.class.getSimpleName();
    private static final boolean TRACE = false;
    private static boolean DEBUG = false;
@@ -1180,53 +1179,24 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        mInputLogic.mSuggest.mDictionaryFacilitator.addWordToUserDictionary(wordToEdit);
    }

    // TODO: Move this method out of {@link LatinIME}.
    // Callback for the {@link SuggestionStripView}, to call when the important notice strip is
    // pressed.
    @Override
    public void showImportantNoticeContents() {
        final Context context = this;
        final AlertDialog.Builder builder =
                new AlertDialog.Builder(context, AlertDialog.THEME_HOLO_DARK);
        builder.setMessage(ImportantNoticeUtils.getNextImportantNoticeContents(context));
        builder.setPositiveButton(android.R.string.ok, null /* listener */);
        final int nextVersion = ImportantNoticeUtils.getNextImportantNoticeVersion(context);
        final OnClickListener onClickListener = new OnClickListener() {
            @Override
            public void onClick(final DialogInterface dialog, final int position) {
                switch (nextVersion) {
                case ImportantNoticeUtils.VERSION_TO_ENABLE_PERSONALIZED_SUGGESTIONS:
                    if (position == DialogInterface.BUTTON_NEGATIVE) {
                        launchSettings();
                    }
                    break;
                default:
                    break;
                }
        showOptionDialog(new ImportantNoticeDialog(this /* context */, this /* listener */));
    }
        };
        switch (nextVersion) {
        case ImportantNoticeUtils.VERSION_TO_ENABLE_PERSONALIZED_SUGGESTIONS:
            builder.setNegativeButton(R.string.go_to_settings, onClickListener);
            break;
        default:
            break;
        }
        final AlertDialog importantNoticeDialog = builder.create();
        importantNoticeDialog.setOnShowListener(new OnShowListener() {

    // Implement {@link ImportantNoticeDialog.ImportantNoticeDialogListener}
    @Override
            public void onShow(final DialogInterface dialog) {
                ImportantNoticeUtils.updateLastImportantNoticeVersion(context);
    public void onClickSettingsOfImportantNoticeDialog(final int nextVersion) {
        launchSettings();
    }
        });
        importantNoticeDialog.setOnDismissListener(new OnDismissListener() {

    // Implement {@link ImportantNoticeDialog.ImportantNoticeDialogListener}
    @Override
            public void onDismiss(final DialogInterface dialog) {
    public void onDismissImportantNoticeDialog(final int nextVersion) {
        setNeutralSuggestionStrip();
    }
        });
        showOptionDialog(importantNoticeDialog);
    }

    public void displaySettingsDialog() {
        if (isShowingOptionDialog()) {