HomeFragment - GachonCapstoneTeam/TTS_JAVA GitHub Wiki

๐Ÿ  HomeFragment

HomeFragment๋Š” ํ™ˆ ํ™”๋ฉด์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ตœ์‹  ๋ฆฌํฌํŠธ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ฃผ๊ณ , TTS ๊ธฐ๋ฐ˜์˜ ์˜ค๋””์˜ค ์žฌ์ƒ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Shimmer ๋กœ๋”ฉ, ๋ฆฌํฌํŠธ ํ•„ํ„ฐ๋ง, ์˜ค๋””์˜ค ํ”Œ๋ ˆ์ด์–ด UI ์กฐ์ž‘ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.


โœ… ์ฃผ์š” ๊ธฐ๋Šฅ ์š”์•ฝ

๊ธฐ๋Šฅ ์„ค๋ช…
๋ฆฌํฌํŠธ ๋ฆฌ์ŠคํŠธ ํ‘œ์‹œ ์„œ๋ฒ„์—์„œ ์ตœ์‹  ๋ฆฌํฌํŠธ๋ฅผ ๋ฐ›์•„ RecyclerView์— ํ‘œ์‹œ
TTS ์˜ค๋””์˜ค ์žฌ์ƒ ํ•ญ๋ชฉ ํด๋ฆญ ์‹œ TTS ๋ณ€ํ™˜ ํ›„ ์˜ค๋””์˜ค ์žฌ์ƒ
์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜ ์žฌ์ƒ/์ผ์‹œ์ •์ง€, ์ด์ „/๋‹ค์Œ ํŠธ๋ž™, ์ „์ฒดํ™”๋ฉด ์žฌ์ƒ ์ง€์›
์ฆ๊ฒจ์ฐพ๊ธฐ ํ•„ํ„ฐ๋ง SharedPreferences ๊ธฐ๋ฐ˜ ์ฆ๊ฒจ์ฐพ๊ธฐ ํ•„ํ„ฐ ํ‘œ์‹œ
๋กœ๋”ฉ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์„œ๋ฒ„ ์‘๋‹ต ์ „ Shimmer๋กœ ๋กœ๋”ฉ ์ค‘ UI ํ‘œ์‹œ
์˜ค๋””์˜ค ์ง„ํ–‰ ํ‘œ์‹œ SeekBar๋กœ ์˜ค๋””์˜ค ์žฌ์ƒ ์‹œ๊ฐ„ ํ‘œ์‹œ ๋ฐ ์ œ์–ด

๐Ÿ”ง ์ฃผ์š” ๋กœ์ง ์„ค๋ช…

๐Ÿ“Œ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ์š”์ฒญ - fetchDataFromServer()

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).get().build();
client.newCall(request).enqueue(new Callback() {
    @Override
    public void onResponse(Call call, Response response) throws IOException {
        String jsonResponse = response.body().string();
        List<Item> items = parseAndSetData(jsonResponse);
        // UI ์—…๋ฐ์ดํŠธ๋Š” main thread์—์„œ ์ˆ˜ํ–‰
    }
});
  • OkHttp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ๋กœ ๋ฆฌํฌํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ , JSON ์‘๋‹ต์„ ํŒŒ์‹ฑํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

โ–ถ๏ธ ์˜ค๋””์˜ค ์žฌ์ƒ ์ฒ˜๋ฆฌ - playTrackAtIndex()

ttsHelper.performTextToSpeech(item.getContent(), filename, audioFile -> {
    if (audioFile.exists()) {
        audioService.prepareAudio(audioFile.getAbsolutePath(), 0, true);
    }
});
  • ํด๋ฆญ๋œ ํ•ญ๋ชฉ์˜ ํ…์ŠคํŠธ๋ฅผ TTS๋กœ ์˜ค๋””์˜ค ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค, AudioService๋ฅผ ํ†ตํ•ด ์žฌ์ƒํ•ฉ๋‹ˆ๋‹ค.

โญ ์ฆ๊ฒจ์ฐพ๊ธฐ ํ•ญ๋ชฉ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ - loadLikedItemsFromPrefs()

SharedPreferences prefs = requireContext().getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
for (Map.Entry<String, ?> entry : prefs.getAll().entrySet()) {
    if (entry.getKey().startsWith("liked_")) {
        Item item = gson.fromJson(entry.getValue().toString(), Item.class);
        likedItems.add(item);
    }
}
  • SharedPreferences์—์„œ ํ‚ค ์ด๋ฆ„์ด "liked_"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽง SeekBar UI ์—…๋ฐ์ดํŠธ

audioService.setProgressUpdateListener((current, total) -> {
    seekBar.setProgress((int)((current / (float) total) * 100));
});
  • ์˜ค๋””์˜ค ์žฌ์ƒ ์‹œ๊ฐ„์— ๋”ฐ๋ผ SeekBar๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ง„ํ–‰ ์ƒํƒœ๋ฅผ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

โœจ Shimmer ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ฒ˜๋ฆฌ

ShimmerAdapter shimmerAdapter = new ShimmerAdapter(5);
recyclerView.setAdapter(shimmerAdapter);
shimmerLayout.startShimmer();
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋™์•ˆ ShimmerAdapter๋กœ ์Šค์ผˆ๋ ˆํ†ค ๋ทฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ , ๋กœ๋”ฉ ์™„๋ฃŒ ์‹œ ์‹ค์ œ ์–ด๋Œ‘ํ„ฐ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”— ๊ด€๋ จ ํด๋ž˜์Šค

  • ItemAdapter: ํ™ˆ ํ™”๋ฉด ๋ฆฌ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์–ด๋Œ‘ํ„ฐ
  • AudioService: ์žฌ์ƒ ์ƒํƒœ ์œ ์ง€ ๋ฐ ์˜ค๋””์˜ค ์ปจํŠธ๋กค ์ฒ˜๋ฆฌ
  • TTSHelper: ํ…์ŠคํŠธ๋ฅผ MP3๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ—ฌํผ ์œ ํ‹ธ๋ฆฌํ‹ฐ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ