/* * Copyright (C) 2012 The CyanogenMod 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.cyanogenmod.filemanager.ui.dialogs; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.cyanogenmod.filemanager.R; import com.cyanogenmod.filemanager.preferences.FileManagerSettings; import com.cyanogenmod.filemanager.preferences.Preferences; import com.cyanogenmod.filemanager.ui.ThemeManager; import com.cyanogenmod.filemanager.ui.ThemeManager.Theme; import com.cyanogenmod.filemanager.ui.widgets.DirectoryInlineAutocompleteTextView; import com.cyanogenmod.filemanager.util.DialogHelper; import java.io.File; /** * A class that wraps a dialog for showing list of consoles for choosing one. * This class lets the user to set the default console. */ public class InitialDirectoryDialog implements DialogInterface.OnClickListener { /** * An interface to communicate events for value changing. */ public interface OnValueChangedListener { /** * Method invoked when the value of the initial directory was changed. * * @param newInitialDir The new initial directory */ void onValueChanged(String newInitialDir); } private static final String TAG = "InitialDirectoryDialog"; //$NON-NLS-1$ private final Context mContext; /** * @hide */ final AlertDialog mDialog; private final DirectoryInlineAutocompleteTextView mAutocomplete; private OnValueChangedListener mOnValueChangedListener; /** * Constructor of <code>InitialDirectoryDialog</code>. * * @param context The current context */ public InitialDirectoryDialog(Context context) { super(); //Save the context this.mContext = context; //Extract current value String value = Preferences.getSharedPreferences().getString( FileManagerSettings.SETTINGS_INITIAL_DIR.getId(), (String)FileManagerSettings.SETTINGS_INITIAL_DIR.getDefaultValue()); //Create the layout LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout layout = (LinearLayout)li.inflate(R.layout.initial_directory, null); final View msgView = layout.findViewById(R.id.initial_directory_info_msg); final TextView labelView = (TextView)layout.findViewById(R.id.initial_directory_label); this.mAutocomplete = (DirectoryInlineAutocompleteTextView)layout.findViewById( R.id.initial_directory_edittext); this.mAutocomplete.setOnValidationListener( new DirectoryInlineAutocompleteTextView.OnValidationListener() { @Override public void onVoidValue() { msgView.setVisibility(View.GONE); //The first invocation is valid. Can be ignore safely if (InitialDirectoryDialog.this.mDialog != null) { InitialDirectoryDialog.this.mDialog.getButton( DialogInterface.BUTTON_POSITIVE).setEnabled(false); } } @Override public void onValidValue() { msgView.setVisibility(View.GONE); //The first invocation is valid. Can be ignore safely if (InitialDirectoryDialog.this.mDialog != null) { InitialDirectoryDialog.this.mDialog.getButton( DialogInterface.BUTTON_POSITIVE).setEnabled(true); } } @Override public void onInvalidValue() { msgView.setVisibility(View.VISIBLE); //The first invocation is valid. Can be ignore safely if (InitialDirectoryDialog.this.mDialog != null) { InitialDirectoryDialog.this.mDialog.getButton( DialogInterface.BUTTON_POSITIVE).setEnabled(false); } } }); this.mAutocomplete.setText(value); // Apply the current theme Theme theme = ThemeManager.getCurrentTheme(context); theme.setBackgroundDrawable(context, layout, "background_drawable"); //$NON-NLS-1$ theme.setTextColor(context, labelView, "text_color"); //$NON-NLS-1$ theme.setTextColor(context, (TextView)msgView, "text_color"); //$NON-NLS-1$ ((TextView)msgView).setCompoundDrawablesWithIntrinsicBounds( theme.getDrawable(this.mContext, "filesystem_warning_drawable"), //$NON-NLS-1$ null, null, null); this.mAutocomplete.applyTheme(); //Create the dialog this.mDialog = DialogHelper.createDialog( context, 0, R.string.initial_directory_dialog_title, layout); this.mDialog.setButton( DialogInterface.BUTTON_POSITIVE, context.getString(android.R.string.ok), this); this.mDialog.setButton( DialogInterface.BUTTON_NEGATIVE, context.getString(android.R.string.cancel), this); } /** * Method that set the listener for retrieve value changed events. * * @param onValueChangedListener The listener for retrieve value changed events */ public void setOnValueChangedListener(OnValueChangedListener onValueChangedListener) { this.mOnValueChangedListener = onValueChangedListener; } /** * Method that shows the dialog. */ public void show() { DialogHelper.delegateDialogShow(this.mContext, this.mDialog); } /** * {@inheritDoc} */ @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case DialogInterface.BUTTON_POSITIVE: done(); break; default: break; } } /** * Method invoked when the user press ok, or Enter key */ private void done() { //Check that the directory is a valid directory String newInitialDir = this.mAutocomplete.getText().toString(); try { if (!newInitialDir.endsWith(File.separator)) { newInitialDir += File.separator; } Preferences.savePreference( FileManagerSettings.SETTINGS_INITIAL_DIR, newInitialDir, true); if (this.mOnValueChangedListener != null) { this.mOnValueChangedListener.onValueChanged(newInitialDir); } } catch (Throwable ex) { Log.e(TAG, "The save initial directory setting operation fails", ex); //$NON-NLS-1$ DialogHelper.showToast( this.mContext, R.string.initial_directory_error_msg, Toast.LENGTH_LONG); } } }