Pass dictionary name instead of unstable position in list

Julien LepillerWed Jun 10 04:06:01+0200 2020

53426a6

Pass dictionary name instead of unstable position in list

app/src/main/java/eu/lepiller/nani/DictionaryActivity.java

5454
            @Override
5555
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
5656
                Intent intent = new Intent(DictionaryActivity.this, DictionaryDownloadActivity.class);
57-
                intent.putExtra("dico", position);
57+
                intent.putExtra(DictionaryDownloadActivity.EXTRA_DICTIONARY, DictionaryFactory.get(position).getName());
5858
                startActivityForResult(intent, DICO_REQUEST);
5959
            }
6060
        });

129129
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
130130
        super.onActivityResult(requestCode, resultCode, data);
131131
        if (requestCode == DICO_REQUEST) {
132+
            DictionaryFactory.updatePackageList();
132133
            adapter.notifyDataSetChanged();
133134
        }
134135
    }

app/src/main/java/eu/lepiller/nani/DictionaryDownloadActivity.java

3434
public class DictionaryDownloadActivity extends AppCompatActivity {
3535
    final static String TAG = "DWN";
3636
    final static int notificationID = 1111;
37+
    final static String EXTRA_DICTIONARY = "eu.lepiller.nani.extra.DICTIONARY";
3738
3839
    Dictionary d;
3940
    DownloadTask currentDownloadTask = null;

8081
        setContentView(R.layout.activity_dictionary_download);
8182
        Bundle extras = getIntent().getExtras();
8283
83-
        // TODO: this will open the first dictionary on error, we probably want to display a proper
84-
        // error instead.
85-
        int position = 0;
84+
        String name = null;
8685
        if(extras != null)
87-
            position = extras.getInt("dico");
86+
            name = extras.getString(EXTRA_DICTIONARY);
8887
89-
        d = DictionaryFactory.get(position);
88+
        d = DictionaryFactory.getByName(this, name);
9089
9190
        manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
9291
        builder =  new NotificationCompat.Builder(DictionaryDownloadActivity.this, "dico_dll")

app/src/main/java/eu/lepiller/nani/dictionary/DictionaryFactory.java

179179
            instance = new DictionaryFactory(context);
180180
    }
181181
182+
    public static Dictionary getByName(Context context, String name) {
183+
        prepare(context);
184+
185+
        for(Dictionary d: dictionaries) {
186+
            if (d.getName().equals(name))
187+
                return d;
188+
        }
189+
190+
        return null;
191+
    }
192+
182193
    public static ArrayList<Result> search(String text) throws DictionaryException {
183194
        if(instance == null)
184195
            throw new NoDictionaryException();