エンジニア未満がエンジニア以上を目指す日々(仮)

戦力外通告の悔しさをバネに自身の技術力向上を目指した技術ブログ

ファイル選択機能の改善 - 壁紙変更アプリ (12)

引き続きファイル選択機能を改善します。
壁紙選択アプリなので、画像ファイル以外を表示しないようにします。

    private String[] permExte = {"jpeg", "jpg", "bmp", "png"};
    private void createFileList() {
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                if(files[i].isDirectory()) {
                    item_list.add(files[i].getName());
                } else {
                    String fileName = files[i].getName();
                    for (int n = 0; n < permExte.length; n++) {
                        if (fileName.substring(fileName.lastIndexOf(".") + 1).equals(permExte[n])) {
                            item_list.add(fileName);
                            break;
                        }
                    }
                }
            }
        }
        if (!curPath.equals("/")) {
            item_list.add("..");
        }
    }

ただ、画像ファイル以外のファイルが表示されなくなることで、
ファイルリスト files と表示用リスト item_list にズレができました。
なので、今まで files[position] で評価していましたが、
item_list.get(position) からファイル名 curFile を取得して、
これを評価するように変更します。

上記修正によって、いままで表示用リストの最後にあった ".." を、
一番上に移動できました。自然な感じになったよ。

全体としてはこんな感じ。
色々無駄な処理がある気がするなぁ。。

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sub);

        mWM = WallpaperManager.getInstance(this);

        listview = (ListView) findViewById(R.id.listview);
        item_list = new ArrayList<String>();

        // Hard-coded files position.
        //files = new File("/storage/sdcard0/Pictures/Screenshots").listFiles();
        curPath = "/storage/sdcard0";
        //files = new File("/storage/sdcard0/").listFiles();
        files = new File(curPath).listFiles();

        // Get files list
        createFileList();
        ArrayAdapter<String> arrayadapter = new ArrayAdapter<String>
                (SubActivity.this, android.R.layout.simple_expandable_list_item_1, item_list);
        listview.setAdapter(arrayadapter);
        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String click_parent = (String) parent.getClass().getSimpleName();
                String click_position = String.valueOf(position);
                String click_id = String.valueOf(id);

                Log.v(TAG, String.format("onItemClick click_parent   : %s", click_parent));
                Log.v(TAG, String.format("onItemClick click_position : %s", click_position));
                Log.v(TAG, String.format("onItemClick click_id       : %s", click_id));
                Log.v(TAG, "item_list to file:"+curPath+item_list.get(position));

                File curFile = new File(curPath, item_list.get(position));

                if(item_list.get(position).equals("..")) {
                    item_list.clear();
                    curPath = curPath.substring(0, curPath.lastIndexOf(File.separator));
                    if(curPath.equals("")) {
                        curPath = "/";
                    }
                    files = new File(curPath).listFiles();

                    createFileList();
                    ArrayAdapter<String> arrayadapter = new ArrayAdapter<String>
                            (SubActivity.this, android.R.layout.simple_expandable_list_item_1, item_list);
                    listview.setAdapter(arrayadapter);
                } else if(curFile.isDirectory()) {
                    item_list.clear();
                    curPath = curFile.getPath();
                    Log.v(TAG, "curPath = "+curPath);
                    files = new File(curFile.toString()).listFiles();
                    createFileList();
                    ArrayAdapter<String> arrayadapter = new ArrayAdapter<String>
                            (SubActivity.this, android.R.layout.simple_expandable_list_item_1, item_list);
                    listview.setAdapter(arrayadapter);
                } else if(files != null) {
                    if(curFile.isFile()) {
                        // Implementation for changing the wallpaper
                        Log.v(TAG, "onItemClick:" + curFile.toString());
                        bmpImageFile = BitmapFactory.decodeFile(curFile.toString());

                        int height = mWM.getDesiredMinimumHeight();
                        int width = mWM.getDesiredMinimumWidth();

                        Log.v(TAG, "before height:" + height);
                        Log.v(TAG, "before width:" + width);

                        //Bitmap resizeBmp = Bitmap.createScaledBitmap(bmpImageFile, 1920, 1200, true);
                        try {
                            mWM.setBitmap(bmpImageFile);
                            //mWM.setBitmap(resizeBmp);
                            mWM.suggestDesiredDimensions(1200, 1920);

                            height = mWM.getDesiredMinimumHeight();
                            width = mWM.getDesiredMinimumWidth();

                            Log.v(TAG, "after height:" + height);
                            Log.v(TAG, "after width:" + width);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        finish();
                    }

                }
            }
        });
    }

    /**
     * Crate file list
     */
    private void createFileList() {
        if (!curPath.equals("/")) {
            item_list.add("..");
        }
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                if(files[i].isDirectory()) {
                    item_list.add(files[i].getName());
                } else {
                    String fileName = files[i].getName();
                    for (int n = 0; n < permExte.length; n++) {
                        if (fileName.substring(fileName.lastIndexOf(".") + 1).equals(permExte[n])) {
                            item_list.add(fileName);
                            break;
                        }
                    }
                }
            }
        }
    }

f:id:hielf:20140830134330p:plain:w300
f:id:hielf:20140830134334p:plain:w300

次はランダムに画像変更を出来るようにしてみます。